草庐IT

c++ - 小数位数之和

全部标签

c++ - 任何程序都会检测到 C/C++ 结构中的缓冲区溢出吗?

考虑以下程序:structabc{intx[5];inty[5];};intmain(){structabctest;test.y[0]=10;printf("%d",test.x[5]);}(借自Isitlegaltooverrunoneelementofastructtoviewanother?)BoundsChecker不会将此检测为溢出。是否有任何程序可以检测此类编程错误? 最佳答案 clang确实如此,即使没有打开特殊标志:$clangexample.c-oexampleexample.c:13:18:warning:ar

c++ - 将 fpos_t 转换为 int 或 char

我正在使用一个对文件长度使用位运算的函数:fpos_tflen;当我尝试将其转换为int或char,或尝试对其进行算术运算时,它失败并出现以下编译错误:错误:在需要整数的地方使用了聚合值 最佳答案 您在滥用该类型。首先,它不代表长度。它代表一个位置。其次,它仅用于调用fsetpos。您不打算对其进行算术运算,因为它不一定代表数字类型。它包含您的库执行fsetpos操作所需的任何信息。在您的库的实现中,fpos_t似乎是一种聚合类型,例如结构。(您可以检查头文件中的定义以确保确定,但不要依赖您在那里发现的任何内容;它可能会在其他平台或

c# - IDE 条件 block 突出显示

设置:假设我有一个相当大的程序,并且正在使用#defines和各种包含/排除各种代码片段的方法。即假设我有一段这样的代码example_file.c:include#ifdefTHISdosomethingreallycoolhere#ifdefTHATdosomethingevencooler#endif#endif定义文件.c:#defineTHATTRUE#defineTHISFALSE现在我不知道这两个语句是否会被包含或使用,除非我查看定义。上面是一个简单的示例,但假设您有50个ifdef,并且它们以不同的方式嵌套,要追踪这50个值中的每一个值是什么有点麻烦。问题:是否存在一个

c++ - 在 C++ 中初始化 C 结构

我正在创建一堆C结构,因此我可以封装要通过dllc接口(interface)传递的数据。这些结构有很多成员,我希望它们有默认值,这样就可以只指定少数几个成员来创建它们。据我了解,结构需要保持C风格,因此不能包含构造函数。创建它们的最佳方法是什么?我在想工厂? 最佳答案 structFoo{staticFoomake_default();};工厂是矫枉过正。当您想要创建给定接口(interface)的实例时使用它,但实现的运行时类型在创建站点上不是静态已知的。 关于c++-在C++中初始化

c++ - 从类返回指针。谁负责删除?

我有一个实现二进制兼容接口(interface)(用作共享库)的C++类,因此只返回C类型。作为constchar*的字符串、void指针和指向具有二进制兼容接口(interface)的其他类的指针。问题是我应该如何组织内存管理,我应该返回指向现有类数据的常量指针(用户使用过时指针的危险),然后自己释放内存,或者指向一些堆变量的指针并让用户负责删除这些指针后来,还是???是否有一些通用准则? 最佳答案 在“二进制兼容接口(interface)”中,使用C接口(interface),您不假设共享堆。因此,从堆中分配内存的一方是将其返回

c++ - Ubuntu 11.10 链接 perftools 库

我无法让Ubuntu11.10中的gcc在googleperftools-lprofiler中正确链接。问题似乎是链接器丢弃了程序中未直接使用的库。一个例子会有所帮助。我们称它为main.cpp:#includeintmain(){doublevalue;for(inti=0;i编译使用:g++-cmain.cpp-omain.og++main.o-omain-lm-lprofiler使用ldd./main检查可执行文件:linux-vdso.so.1=>(0x00007fff5a9ff000)libc.so.6=>/lib/x86_64-linux-gnu/libc.so.6(0x0

c++ - 找到巨大的已分配内存块

我有一个用c/c++编写的程序(守护进程)。它运行完美,但在一段时间后(可能是5天、一周、2周),它会分配大量内存。我不明白代码的哪些部分没有释放分配的内存。启动时内存使用量约为20-30兆字节。然后在一段时间后,或者可能发生事件后,它会以每小时1Mb的速度缓慢增长,如果不终止,可能会因为没有可用内存而崩溃。我已经尝试使用Valgrind并在它已经分配了大约500Mb的内存时以通常的方式关闭了守护进程。关机过程真的很长,但是当它结束时,Valgrind说没有发现内存泄漏,除了mysql_init/mysql_close程序(大约504字节肯定丢失)。Google表示无需担心此Mysql

c++ - _IO_wide_data_2 : what's this?

我在嵌入式平台上工作(架构是SH4),几分钟前我的程序因SIGABRT而崩溃。幸运的是,我在gdbserver下运行,被这个信号中断的线程有这个堆栈转储:#00x2a7f1678inraise()from/home/[user]/target/lib/libc.so.6#10x2a7f2a4cinabort()from/home/[user]/target/lib/libc.so.6#20x2a81ade0in__libc_message()from/home/[user]/target/lib/libc.so.6#30x2a81f3a8inmalloc_printerr()from/

c++ - C 和 C++ 中的套接字解​​释

好吧,我一直想知道是否有用于C++的标准套接字头文件我搜索了整个互联网(使用谷歌搜索引擎),但找不到任何标准的C++套接字头文件,除了找到一些库,如Boost、chilkat等...我只成功地找到了C编程语言的标准套接字头文件。如果我使用C标准套接字头文件,但在我的C++代码中,这是否意味着我的程序是纯C++还是C和C++?因为我没有找到任何标准的C++套接字头文件。像有对于C++,有对于C,但没有套接字C++的标准头文件。我希望C/C++高手能一步一步地为我解释所有这些。 最佳答案 C++中没有标准的套接字库。您可以使用您的操作系

c++ - 使用 CUBLAS 求最大值和最小值

我无法理解为什么我使用CUBLAS在double范围内找到最大值和最小值的函数无法正常工作。代码如下:voidfindMaxAndMinGPU(double*values,int*max_idx,int*min_idx,intn){double*d_values;cublasHandle_thandle;cublasStatus_tstat;safecall(cudaMalloc((void**)&d_values,sizeof(double)*n),"cudaMalloc(d_values)infindMaxAndMinGPU");safecall(cudaMemcpy(d_valu